package shiyl.use.springboot.loadbalance;

import java.util.ArrayList;
import java.util.List;

/**
 * 均衡负载器
 * @param <T> 实现了ILoader的负载点
 */
public class Balancer< T extends  ILoader> {

    List<T> loaders = new ArrayList<>();
    ILoadBalancePolicy policy = null ;

    /**
     * 注册一个负载点
     *
     * @param loader
     * @return
     */
    public void addLoader(T loader) {
        this.loaders.add(loader);
    }

    /**
     * 设置负载均衡策略
     *
     * @param policy
     * @return
     */
    public Balancer setPolicy(ILoadBalancePolicy policy) {
        this.policy = policy ;
        return this ;
    }

    /**
     * 按照策略选择一个符合条件的负载点
     *
     * @return
     */
    public T select() {

        return this.loaders.get(0);
    }

    /**
     * 直接得到endpoint
     * @param <E>
     * @return
     */
    public <E> E selectEndpoint() {
        E e = (E)select().getEndpoint() ;
        return e;
    }

}
